package com.freesky.common.vo;

import lombok.Data;

import java.io.Serializable;
import java.util.Properties;

/**
 * java.version    Java运行时环境版本
 * java.vendor     Java运行时环境供应商
 * java.vendor.url     Java供应商URL
 * java.home   Java安装目录
 * java.vm.specification.version   Java虚拟机规范版本
 * java.vm.specification.vendor    Java虚拟机规范供应商
 * java.vm.specification.name  Java虚拟机规范名称
 * java.vm.version     Java虚拟机实现版本
 * java.vm.vendor  Java虚拟机实现供应商
 * java.vm.name    Java虚拟机实现名称
 * java.specification.version  Java运行时环境规范版本
 * java.specification.vendor   Java运行时环境规范供应商
 * java.specification.name     Java运行时环境规范名称
 * java.class.version  Java类格式版本号
 * java.class.path     Java类路径
 * java.library.path   加载库时搜索的路径列表
 * java.io.tmpdir  默认的临时文件路径
 * java.compiler   要使用的 JIT 编译器的名称
 * java.ext.dirs   一个或多个扩展目录的路径
 * os.name     操作系统名称
 * os.arch     操作系统架构
 * os.version  操作系统版本
 * file.separator  文件分隔符（在 UNIX 系统中是“/”）
 * path.separator  路径分隔符（在 UNIX 系统中是“:”）
 * line.separator  行分隔符（在 UNIX 系统中是“/n”）
 * user.name   用户账户名称
 * user.home   用户主目录
 * user.dir    用户当前工作目录
 */
@Data
public class SystemProp implements Serializable {
    private static final long serialVersionUID = 1L;
    private String osName;
    private String osArch;
    private String osVersion;
    private String userName;
    private String userHome;
    private String userDir;
    private String fileSeparator;
    private String pathSeparator;
    private String lineSeparator;
    private String javaVersion;
    private String javaVendor;
    private String javaVendorUrl;
    private String javaHome;
    private String javaVMSpecificationVersion;
    private String javaVMSpecificationVendor;
    private String javaVMSpecificationName;
    private String javaVMVersion;
    private String javaVMVendor;
    private String javaVMName;
    private String javaSpecificationVersion;
    private String javaSpecificationVendor;
    private String javaSpecificationName;
    private String javaClassVersion;
    private String javaClassPath;
    private String javaLibraryPath;
    private String javaIOTmpdir;
    private String javaCompiler;
    private String javaExtDirs;

    public static SystemProp init() {
        SystemProp prop = new SystemProp();
        prop.setOsName(System.getProperty("os.name"));
        prop.setOsArch(System.getProperty("os.arch"));
        prop.setOsVersion(System.getProperty("os.version"));
        prop.setUserName(System.getProperty("user.name"));
        prop.setUserHome(System.getProperty("user.home"));
        prop.setUserDir(System.getProperty("user.dir"));
        prop.setFileSeparator(System.getProperty("file.separator"));
        prop.setPathSeparator(System.getProperty("path.separator"));
        prop.setLineSeparator(System.getProperty("line.separator"));
        prop.setJavaVersion(System.getProperty("java.version"));
        prop.setJavaVendor(System.getProperty("java.vendor"));
        prop.setJavaVendorUrl(System.getProperty("java.vendor.url"));
        prop.setJavaHome(System.getProperty("java.home"));
        prop.setJavaVMSpecificationVersion(System.getProperty("java.vm.specification.version"));
        prop.setJavaVMSpecificationVendor(System.getProperty("java.vm.specification.vendor"));
        prop.setJavaVMSpecificationName(System.getProperty("java.vm.specification.name"));
        prop.setJavaVMVersion(System.getProperty("java.vm.version"));
        prop.setJavaVMVendor(System.getProperty("java.vm.vendor"));
        prop.setJavaVMName(System.getProperty("java.vm.name"));
        prop.setJavaSpecificationVersion(System.getProperty("java.specification.version"));
        prop.setJavaSpecificationVendor(System.getProperty("java.specification.vendor"));
        prop.setJavaSpecificationName(System.getProperty("java.specification.name"));
        prop.setJavaClassVersion(System.getProperty("java.class.version"));
        prop.setJavaClassPath(System.getProperty("java.class.path"));
        prop.setJavaLibraryPath(System.getProperty("java.library.path"));
        prop.setJavaIOTmpdir(System.getProperty("java.io.tmpdir"));
        prop.setJavaCompiler(System.getProperty("java.compiler"));
        prop.setJavaCompiler(new Properties().getProperty("java.compiler"));
        prop.setJavaExtDirs(System.getProperty("java.ext.dirs"));
        return prop;
    }
}
